package org.example;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.File;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @purpose 构建分割pdf的应用
 * @note 同一个文件可以构建多个对象
 * @note 不想研究这个UI，放这里吧
 */
public class Main{

    // 构建ui页面按钮显示文本
    public JFrame jf = new JFrame("PDF分割");
    public JLabel label=new JLabel("所选文件路径：");
    public static JTextField jtf=new JTextField(20);
    public JButton button=new JButton("浏览");

    public static JTextField input1 = new JTextField("1",5);
    public static JTextField input2 = new JTextField("2",5);
    public static JTextField input3 = new JTextField("1",5);

    // 输入框文本
    public JLabel label1=new JLabel("起始页：");
    public JLabel label2=new JLabel("结束页：");
    public JLabel label3 =new JLabel("每个文件的页数：");

    public JButton button2=new JButton("分割");

    public JTextField jtf2=new JTextField(20);
    public JLabel labels=new JLabel("生成文件路径：");

    //初始化窗口
    public void NewWindow() {
        //设置显示窗口标题
        //设置窗口显示尺寸 好像是无效的
        jf.setSize(1600,1200);
        //设置窗口是否可以关闭
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //获取本窗口的内容窗格
        //设置本窗口是否可见
        jf.setVisible(true);
    }

    //文件选择
    public void chooseFile(){
        // 实例化面板
        JPanel panel=new JPanel();
        panel.add(label);
        panel.add(jtf);
        panel.add(button);

        panel.add(label1);
        panel.add(input1);
        panel.add(label2);
        panel.add(input2);
        panel.add(label3);
        panel.add(input3);

        panel.add(button2);
        panel.add(labels);
        panel.add(jtf2);
        jf.add(panel);
        jf.setBounds(300,200,450,180);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button.addActionListener(new MyActionListener());    //监听按钮事件
        button2.addActionListener(new MyActionListener2());    //监听按钮事件
    }

    //Action事件处理 选择事件
    class MyActionListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent arg0)
        {
            JFileChooser fc=new JFileChooser("C:\\");
            int val=fc.showOpenDialog(null);    //文件打开对话框
            if(val==fc.APPROVE_OPTION)
            {
                //正常选择文件
                jtf.setText(fc.getSelectedFile().toString());
            }
            else
            {
                //未正常选择文件，如选择取消按钮
                jtf.setText("未选择文件");
            }
        }
    }

    // 分割事件
    class MyActionListener2 implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent arg0)
        {
            String text = jtf.getText();
            String[] strs = text.split("\\\\");
            String path = strs[strs.length - 1];
            System.out.println(path);
            if(path.equals("未选择文件")){
                JOptionPane.showMessageDialog(null, "请选择文件", "提示", JOptionPane.ERROR_MESSAGE);
                return;
            }
            if(jtf.getText().equals("")){
                JOptionPane.showMessageDialog(null, "请选择文件或者输入文件地址", "提示", JOptionPane.ERROR_MESSAGE);
                return;
            }
            if(input1.getText().equals("") || input2.getText().equals("") || input3.getText().equals("")){
                JOptionPane.showMessageDialog(null, "请输入正确的页数", "提示", JOptionPane.ERROR_MESSAGE);
                return;
            }
            if(Integer.parseInt(input1.getText()) > Integer.parseInt(input2.getText())){
                JOptionPane.showMessageDialog(null, "起始页不能大于结束页", "提示", JOptionPane.ERROR_MESSAGE);
                return;
            }
            if(Integer.parseInt(input3.getText()) > Integer.parseInt(input2.getText()) - Integer.parseInt(input1.getText()) + 1){
                JOptionPane.showMessageDialog(null, "每个文件的页数不能大于总页数", "提示", JOptionPane.ERROR_MESSAGE);
                return;
            }
            if(Integer.parseInt(input1.getText()) < 1 || Integer.parseInt(input2.getText()) < 1 || Integer.parseInt(input3.getText()) < 1){
                JOptionPane.showMessageDialog(null, "页数不能小于1", "提示", JOptionPane.ERROR_MESSAGE);
                return;
            }
            String[] names = path.split("\\.");
            if(!names[1].equals("pdf")){
                JOptionPane.showMessageDialog(null, "请选择pdf", "提示", JOptionPane.ERROR_MESSAGE);
                return;
            }

            Map<String,Object> fileNames = new LinkedHashMap<>();
            pdf pdf = new pdf();
            try {
                fileNames = pdf.division(Integer.parseInt(input1.getText()), Integer.parseInt(input2.getText()), Integer.parseInt(input3.getText()), text, names[0]);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            String string = "";
            string = "";
            for(String s:fileNames.keySet()){
                string += ", "+ fileNames.get(s);
            }

            System.out.println( "打印：" + string);
            jtf2.setText(string);
            JOptionPane.showMessageDialog(null, "分割成功", "提示", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    /**
     * 创建目录
     * @param dirName 目录名称
     */
    public static void createDir(String dirName) {
        //File dir = new File("C:\\other");
        File dir = new File("C:\\other");

        if (!dir.exists()) {
            boolean created = dir.mkdirs(); // mkdir() 只创建单级目录，mkdirs() 创建多级目录
            if (created) {
                System.out.println("目录创建成功: " + dir.getAbsolutePath());
            } else {
                System.out.println("目录创建失败");
            }
        } else {
            System.out.println("目录已存在: " + dir.getAbsolutePath());
        }
    }


    /**
     * 入口函数
     * @param args
     */
    public static void main(String[] args) {
        createDir("C:\\other");
        Main main =  new Main();
        main.NewWindow();
        main.chooseFile();
//        pdf pdf = new pdf();
//        try {
//            pdf.division(1, 2, 1 );
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }

    }
}